package fr.upstlse.glre.client.espaceperso.profil.action;

import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.user.client.rpc.AsyncCallback;

import fr.upstlse.glre.client.espaceperso.profil.EtudiantProfil;
import fr.upstlse.glre.client.utilitaires.ControlerUtil;
import fr.upstlse.glre.client.vo.user.EtudiantVOGWT;
import fr.upstlse.glre.client.widgets.fields.EtudiantFields;

public class ProfilEditionSubmit extends SelectionListener<ComponentEvent> {

	EtudiantVOGWT etudiant;
	EtudiantFields etudiantFields;
	EtudiantProfil etudiantProfil;

	public ProfilEditionSubmit(EtudiantFields etudiantFields,
			EtudiantProfil etudiantProfil) {
		super();

		this.etudiantFields = etudiantFields;
		this.etudiantProfil = etudiantProfil;
		this.etudiant = etudiantProfil.getEtudiant();
	}

	public void componentSelected(ComponentEvent ce) {
		etudiant.setLogin((String) etudiantFields.getLogin().getValue());
		etudiant
				.setPassword((String) etudiantFields.getMotdepasse().getValue());
		etudiant.setNom((String) etudiantFields.getNom().getValue());
		etudiant.setPrenom((String) etudiantFields.getPrenom().getValue());
		etudiant.setEmail((String) etudiantFields.getEmail().getValue());
		etudiant.setTelephonefixe((String) etudiantFields.getTelephoneFixe()
				.getValue());
		etudiant.setTelephoneportable((String) etudiantFields
				.getTelephonePortable().getValue());
		etudiant.getAdresse().setVoie(
				(String) etudiantFields.getAdresseVoie().getValue());
		etudiant.getAdresse().setCodepostal(
				(String) etudiantFields.getAdresseCodePostal().getValue());
		etudiant.getAdresse().setVille(
				(String) etudiantFields.getAdresseVille().getValue());
		etudiant.getAdresse().setPays(
				(String) etudiantFields.getAdressePays().getValue());

		final MessageBox lInfoMessageBox = MessageBox.prompt("Information",
				"Mise à jour en cours...");
		AsyncCallback<Object> lCallback = new AsyncCallback<Object>() {

			public void onFailure(Throwable pCaught) {
				lInfoMessageBox.hide();
				MessageBox.alert(
						"Erreur mise à jour", pCaught.getMessage(), null);
			}

			public void onSuccess(Object pResult) {
				lInfoMessageBox.hide();
				Info.display("Information", "Mis à jour avec succès", "");
				etudiantProfil.readingMode();
				etudiantProfil.getProfilPanel().add(
						etudiantProfil.getProfilReadingPanel());
				etudiantProfil.getProfilPanel().layout();
				etudiantProfil.getProfilPanel().remove(
						etudiantProfil.getProfilEditingPanel());
				etudiantProfil.getProfilPanel().layout();
				etudiantProfil.setEditionMode(false);

			}
		};

		ControlerUtil.getUserControlerServiceAsyncInstance()
				.updateEtudiant(etudiant, lCallback);
	}

}
